#ifndef _I_ACTOR_H_
#define _I_ACTOR_H_

#include "../rtCommon/C_Camera.h"

#include "../interface/I_Asset.h"
#include "../interface/I_BaseMaterial.h"
#include "../interface/I_api_Device.h"
#include "../interface/I_api_Program.h"

class I_Actor
{
protected:
	I_Asset * m_pAsset;
	I_BaseMaterial * m_pBaseMaterial;
	I_api_Program	*	m_pProgram;

	matrix4x4 * m_pWS;
	int					m_nWS_Id;

public:

	I_Actor();
	virtual ~I_Actor();

	virtual I_Asset					* Asset();
	virtual void							Asset(I_Asset * pAsset);
	
	virtual I_BaseMaterial	* BaseMaterial();
	virtual void							BaseMaterial(I_BaseMaterial * pBaseMaterial);

	virtual matrix4x4				* pMatrixWS();
	virtual void							pMatrixWS(matrix4x4 * pMatrix);

	virtual int								nMatrixWS();
	virtual void							nMatrixWS(int id);

	virtual	I_api_Program		*	Program();	
	virtual	void							Program(I_api_Program * pProgram);

	virtual void							Render(I_api_Device * pDevice, C_Camera * pCamera)=0;
	virtual void							RenderBVHTree(I_api_Device * pDevice, C_Camera * pCamera, int nMaxLevel)=0;

	virtual int								nPrimitive() { return m_pAsset->nPrimitive(); }
	virtual int								nVertex() { return m_pAsset->nVertex(); }
};

#endif